#include<iostream>
using namespace std;
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<fcntl.h>

static void handler(int signo){

    sleep(5);
    cout<<"get a signo:"<<signo<<endl;
    //采取轮训的方式等待
    int ret = waitpid(-1,nullptr,WNOHANG);//-1表示等待任意进程
    if(ret > 0){
        printf("wait success!\n");
    }
}

int main(){
    //捕捉17号信号
    //如果将信号处理方式设置为忽略，那么子进程就不会再给父进程发送信号。会自动被等待
    signal(17,SIG_IGN);
    //signal(17,handler);

    //试试等待多进程

    for(int i = 0;i < 10;i++){
        pid_t id = fork();
        if(id == 0){
            while(true){
                cout<<"I am child process :"<<i<<"id："<<getpid()<<endl;
                sleep(5);
                break;
            }
            cout<<"child quit"<<endl;
            exit(1);
       }

    }
   // exit(0);















    // pid_t id = fork();
    // if(id == 0){
    //     //child
    //     int cnt = 0;
    //     while(true){
    //         cnt++;
    //         cout<<"I am child process :"<<getpid()<<":cnt:"<<cnt<<endl;
    //         sleep(1);
    //         if(cnt == 10){
    //             exit(0);
    //         }
    //     }
       
    // }

    //parent
    while(true){
        cout<<"I am parent process:"<<getpid()<<endl;
        sleep(1);
    }


    return 0;
}